<?php
/**
 * Parent model class with generic method stuff in it
 * 
 * @package disputeo
 * @version 1.0
 * @author jimmy.dixon
 */

abstract class Application_Model_Disputeo
{
    /**
     * constructor
     */
    abstract public function __construct(array $options = null);
    
    /**
     * set magic method
     */
    public function __set($name, $value)
    {
        $method = 'set' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception('Invalid ' . get_class($this) . ' property');
        }
        $this->$method($value);
    }

    /**
     * get magic method
     */
    public function __get($name)
    {
        $method = 'get' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception('Invalid ' . get_class($this) . ' property');
        }
        return $this->$method();
    }

    /**
     * set properties
     */
    public function setOptions(array $options)
    {
        $methods = get_class_methods($this);
        foreach ($options as $key => $value) {
            $key = str_replace('_', ' ', $key);
            $method = 'set' . ucwords($key);
            $method = str_replace(' ', '', $method);
            if (in_array($method, $methods)) {
                $this->$method($value);
            }
        }
        return $this;
    }
}